全部学科
Python全栈
python
NodeJS全栈
nodejs
📅 2026-05-21 6 分钟 ✍️ juanwangdev

Secret 敏感信息管理

敏感信息(密码、API Key)不应明文传递,Docker Secret 提供安全方案。

Docker Secret(Swarm 模式)

创建 Secret

Bash
# 从标准输入创建
echo "mypassword" | docker secret create db_password -

# 从文件创建
docker secret create db_password /path/to/password.txt

# 查看 Secret
docker secret ls

使用 Secret

YAML
# docker-compose.yml
version: '3.8'

services:
  db:
    image: postgres:15
    secrets:
      - db_password
    environment:
      POSTGRES_PASSWORD_FILE: /run/secrets/db_password

secrets:
  db_password:
    external: true
Bash
# 容器内读取
cat /run/secrets/db_password

外部 Secret 管理

环境变量传入

Bash
# 从环境变量传入(不写入文件)
DB_PASSWORD=mypassword docker compose up -d
YAML
services:
  app:
    environment:
      DB_PASSWORD: ${DB_PASSWORD}

Docker Vault

Bash
# 使用 HashiCorp Vault
vault kv put secret/db password=mypassword

# 容器通过 Vault API 读取

加密传递

Bash
# 使用加密 Secret
docker secret create encrypted_secret --encrypted

# Swarm 模式加密传输
# Secret 在节点间加密传输,不落盘

避免明文

错误做法

YAML
# 不要这样做
services:
  app:
    environment:
      DB_PASSWORD: mypassword123  # 明文暴露在 YAML

正确做法

YAML
# 使用环境变量
services:
  app:
    environment:
      DB_PASSWORD: ${DB_PASSWORD}

# 或使用 Secret
services:
  app:
    secrets:
      - db_password

Secret 轮转

Bash
# 创建新 Secret
docker secret create db_password_v2 -

# 更新服务使用新 Secret
docker service update \
  --secret-rm db_password \
  --secret-add db_password_v2 \
  my-service

# 删除旧 Secret
docker secret rm db_password

Kubernetes Secret

YAML
# K8s Secret 配置
apiVersion: v1
kind: Secret
metadata:
  name: db-credentials
type: Opaque
data:
  password: bXlwYXNzd29yZA==  # Base64 编码

Docker Secret 仅 Swarm 模式可用,单机使用环境变量或外部 Secret 管理。

要点总结

  • Docker Secret 在 Swarm 模式管理敏感信息,加密传输
  • Secret 挂载到 /run/secrets/,容器内读取
  • 避免在 YAML 中明文暴露密码,使用环境变量或 Secret
  • Secret 轮转创建新版本,更新服务后删除旧版本
  • 非 Swarm 环境使用外部 Secret 管理(Vault、K8s Secret)
想在手机上练习这篇文章的配套题目?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
← 上一篇 最小化镜像原则
下一篇 → AppArmor/Seccomp 配置
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码